#ifndef __M_BIT_H__
#define __M_BIT_H__
#include "logger.hpp"

namespace zdflog
{
    /**
     * @brief 获取指定名称的日志器
     * @param name 日志器名称
     * @return 指向日志器的智能指针
     */
    Logger::ptr getLogger(const std::string &name)
    {
        return loggerManager::getInstance().getLogger(name);
    }

    /**
     * @brief 获取根日志器
     * @return 指向根日志器的智能指针
     */
    Logger::ptr rootLogger()
    {
        return loggerManager::getInstance().rootLogger();
    }

// 基础日志宏定义，使用当前文件和行号
#define debug(fmt, ...) debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define info(fmt, ...) info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define warn(fmt, ...) warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define error(fmt, ...) error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define fatal(fmt, ...) fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

// 指定日志器的日志宏定义
#define LOG_DEBUG(logger, fmt, ...) (logger)->debug(fmt, ##__VA_ARGS__)
#define LOG_INFO(logger, fmt, ...) (logger)->info(fmt, ##__VA_ARGS__)
#define LOG_WARN(logger, fmt, ...) (logger)->warn(fmt, ##__VA_ARGS__)
#define LOG_ERROR(logger, fmt, ...) (logger)->error(fmt, ##__VA_ARGS__)
#define LOG_FATAL(logger, fmt, ...) (logger)->fatal(fmt, ##__VA_ARGS__)

// 使用根日志器的快捷日志宏定义
#define LOGD(fmt, ...) LOG_DEBUG(zdflog::rootLogger(), fmt, ##__VA_ARGS__)
#define LOGI(fmt, ...) LOG_INFO(zdflog::rootLogger(), fmt, ##__VA_ARGS__)
#define LOGW(fmt, ...) LOG_WARN(zdflog::rootLogger(), fmt, ##__VA_ARGS__)
#define LOGE(fmt, ...) LOG_ERROR(zdflog::rootLogger(), fmt, ##__VA_ARGS__)
#define LOGF(fmt, ...) LOG_FATAL(zdflog::rootLogger(), fmt, ##__VA_ARGS__)
}

#endif